package com.sheng.leetcode.year2025.month09.day27;

import org.junit.Test;

/**
 * @author by ls
 * @date 2025/9/28
 * <p>
 * 812. 最大三角形面积<p>
 * <p>
 * 给你一个由 X-Y 平面上的点组成的数组 points ，其中 points[i] = [xi, yi] 。<p>
 * 从其中取任意三个不同的点组成三角形，返回能组成的最大三角形的面积。与真实值误差在 10^-5 内的答案将会视为正确答案。<p>
 * <p>
 * 示例 1：<p>
 * 输入：points = [[0,0],[0,1],[1,0],[0,2],[2,0]]<p>
 * 输出：2.00000<p>
 * 解释：输入中的 5 个点如上图所示，红色的三角形面积最大。<p>
 * <p>
 * 示例 2：<p>
 * 输入：points = [[1,0],[0,0],[0,1]]<p>
 * 输出：0.50000<p>
 * <p>
 * 提示：<p>
 * 3 <= points.length <= 50<p>
 * -50 <= xi, yi <= 50<p>
 * 给出的所有点 互不相同<p>
 */
public class LeetCode0812 {

    @Test
    public void test() {
//        int[][] points = {{0, 0}, {0, 1}, {1, 0}, {0, 2}, {2, 0}};
        int[][] points = {{1, 0}, {0, 0}, {0, 1}};
        System.out.println(new Solution().largestTriangleArea(points));
    }
}

class Solution {
    public double largestTriangleArea(int[][] points) {
        // 从集合中任选三个点，组成三角形，求面积最大的三角形
        double maxArea = 0;
        int n = points.length;
        for (int i = 0; i < n; i++) {
            for (int j = i + 1; j < n; j++) {
                for (int k = j + 1; k < n; k++) {
                    int[] p1 = points[i];
                    int[] p2 = points[j];
                    int[] p3 = points[k];
                    double area = 0.5 * Math.abs(
                            p1[0] * (p2[1] - p3[1]) +
                                    p2[0] * (p3[1] - p1[1]) +
                                    p3[0] * (p1[1] - p2[1])
                    );
                    maxArea = Math.max(maxArea, area);
                }
            }
        }
        return maxArea;
    }
}
